# encoding:utf-8
import base64
import hashlib
import jpype
import os

def base64_encrypt(str):
    return str(base64.encodebytes(str.encode()), encoding='utf-8').replace('\n', '')

def base64_decode(encrypt):
    return str(base64.decodebytes(encrypt.encode(encoding='utf-8')), encoding='utf-8')


def md5(str):
    md = hashlib.md5()
    md.update(str.encode(encoding='UTF-8'))
    # return md.hexdigest().upper()
    return md.hexdigest()

def _env():
    # 验证环境是否准备就绪

    # 获取JVM安装路径
    jvmPath = jpype.getDefaultJVMPath()
    # 启动JVM
    jpype.startJVM(jvmPath)
    # 执行java代码
    jpype.java.lang.System.out.println("hello world!")
    # 关闭JVM
    jpype.shutdownJVM()


def jar_key():

    # 获取JVM安装路径
    jvmPath = jpype.getDefaultJVMPath()
    jarPath = 'JavaMD5.jar'  # jar包路径，可以放代码同一目录
    # 启动JVM
    jpype.startJVM(jvmPath, "-Djava.class.path=%s" % jarPath)
    # 执行java代码
    # jpype.java.lang.System.out.println("hello world!")
    # 调用java class对象,先导入包
    md5class = jpype.JClass("com.ndktools.javamd5.Mademd5")
    password = "yoyo"
    md = md5class()  # 实例化
    md5_password = md.toMd5(password)
    print(md5_password)
    # 关闭JVM
    jpype.shutdownJVM()

def jars_key():

    # 获取../jre/bin/server/jvm.dll文件位置
    jvmPath = jpype.getDefaultJVMPath()
    # 获取当前路径
    ext_classpath = os.getcwd()
    # 用分号连接所有jar包
    jar_path = ";".join(i for i in os.listdir(r'F:\MyPath\test') if '.jar' in i)
    # 启动jvm虚拟机，加载所有jar包，每个jar包用分号连接
    jpype.startJVM(jvmPath, "-ea", '-Djava.class.path={}\\{}'.format(ext_classpath, jar_path))
    # 加载java类
    JDClass = jpype.JClass("MathDemo")
    # 实例化对象
    apiHelper = JDClass()
    # 调用方法
    print(apiHelper.add(5, 6))
    # 关闭jvm虚拟机
    jpype.shutdownJVM()


if __name__ == '__main__':
    # s = 'hello中国'
    # s_ = md5('Admin123.')
    # print(s_)
    # # _env()
    base64_encrypt()


'''
附：还有一种使用签名加密
消息摘要算法：
消息摘要算法可以验证信息是否被篡改。
在数据发送前，首先使用消息摘要算法生成该数据的签名，然后签名和数据一同发送给接收者。
接收者收到数据后，对收到的数据采用消息摘要算法获得签名，最后比较签名是否一致，以此来判断数据在传输过程中是否发生修改。
'''